<?php

/**
 * Essa classe foi criada com o objetivo de agregar funções úteis usadas no dia a dia e que não constam em outras classes.
 */
class Util {

    private $Pdo;

    function __construct($pdo = false) {
        $this->Pdo = ($pdo === false) ? Conexao::open('sistema') : $pdo;
    }

    public function AtualizaCampo($campo, $tabela, $id, $valor) {
        if ($valor != "") {
            try {
                $pk = explode('.', $tabela);
                $consulta = $this->Pdo->prepare(""
                        . "UPDATE {$tabela} "
                        . "SET {$campo} = :valor "
                        . "WHERE id_{$pk[1]} = {$id} ");
                $consulta->bindParam(':valor', $valor);
                $consulta->execute();

                $retorno['novo_valor'] = $valor;
                $retorno['resultado'] = 'sim';
            } catch (PDOException $e) {
                $retorno['resultado'] = 'erro';
                new Excecao($e);
            }
        } else {
            $retorno['resultado'] = 'sem_valor';
        }
        return json_encode($retorno);
    }

    public function removeSlashes($array) {
        $array1 = array();
        foreach ($array as $key => $value) {
            if (is_array($value))
                $array1[$key] = $this->removeSlashes($value);
            else
                $array1[$key] = stripcslashes($value);
        }
        return $array1;
    }

    /* função para somar apenas os dias úteis */

    function somar_dias_uteis($str_data, $int_qtd_dias_somar = 5) {
        $str_data = substr($str_data, 0, 10);

        if (preg_match("@/@", $str_data) == 1)
            $str_data = implode("-", array_reverse(explode("/", $str_data)));

        $array_data = explode('-', $str_data);
        $count_days = 0;
        $int_qtd_dias_uteis = 0;

        while ($int_qtd_dias_uteis < $int_qtd_dias_somar) {
            $count_days++;
            if (( $dias_da_semana = gmdate('w', strtotime('+' . $count_days . ' day', mktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6')
                $int_qtd_dias_uteis++;
        }
        return gmdate('Y/m/d', strtotime('+' . $count_days . ' day', strtotime($str_data)));
    }

    static function valorPorExtenso($valor) {
        $singular = array("centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão");
        $plural = array("centavos", "reais", "mil", "milhões", "bilhões", "trilhões", "quatrilhões");

        $c = array("", "cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seissentos", "setecentos", "oitocentos", "novecentos");
        $d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa");
        $d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove");
        $u = array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove");

        $z = 0;
        $valor = number_format($valor, 2, ".", ".");
        $inteiro = explode(".", $valor);
        for ($i = 0; $i < count($inteiro); $i++) {
            for ($ii = strlen($inteiro[$i]); $ii < 3; $ii++) {
                $inteiro[$i] = "0" . $inteiro[$i];
            }
        }

        // $fim identifica onde que deve se dar junção de centenas por "e" ou por"," ;)
        $fim = count($inteiro) - ($inteiro[count($inteiro) - 1] > 0 ? 1 : 2);
        $rt = '';
        for ($i = 0; $i < count($inteiro); $i++) {
            $valor = $inteiro[$i];
            $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]];
            $rd = ($valor[1] < 2) ? "" : $d[$valor[1]];
            $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : "";

            $r = $rc . (($rc && ($rd || $ru)) ? " e " : "") . $rd . (($rd &&
                    $ru) ? " e " : "") . $ru;
            $t = count($inteiro) - 1 - $i;
            $r .= $r ? " " . ($valor > 1 ? $plural[$t] : $singular[$t]) : "";
            if ($valor == "000") {
                $z++;
            } elseif ($z > 0) {
                $z--;
            }
            if (($t == 1) && ($z > 0) && ($inteiro[0] > 0)) {
                $r .= ( ($z > 1) ? " de " : "") . $plural[$t];
            }
            if ($r) {
                $rt = $rt . ((($i > 0) && ($i <= $fim) && ($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " ") . $r;
            }
        }
        return($rt ? $rt : "zero");
    }

    static function dataPorExtenso($data) {
        $data = explode("-", $data);

        $dia = $data[2];
        $mes = $data[1];
        $ano = $data[0];

        switch ($mes) {
            case 1: $mes = "JANEIRO"; break;
            case 2: $mes = "FEVEREIRO"; break;
            case 3: $mes = "MARÇO"; break;
            case 4: $mes = "ABRIL"; break;
            case 5: $mes = "MAIO"; break;
            case 6: $mes = "JUNHO"; break;
            case 7: $mes = "JULHO"; break;
            case 8: $mes = "AGOSTO"; break;
            case 9: $mes = "SETEMBRO"; break;
            case 10: $mes = "OUTUBRO"; break;
            case 11: $mes = "NOVEMBRO"; break;
            case 12: $mes = "DEZEMBRO"; break;
        }

        $mes = ucfirst(strtolower($mes));
        return "$dia de $mes de $ano";
    }

    static function mesPorExtenso($mes) {
        switch ($mes) {
            case 1: return "Janeiro";
            case 2: return "Fevereiro";
            case 3: return "Março";
            case 4: return "Abril";
            case 5: return "Maio";
            case 6: return "Junho";
            case 7: return "Julho";
            case 8: return "Agosto";
            case 9: return "Setembro";
            case 10: return "Outubro";
            case 11: return "Novembro";
            case 12: return "Dezembro";
        }
    }
    
    public function formaURL ($type = 'get') {
        $uri = array();
        switch ($type) {
            case 'get':
                $uri = $_GET;
                break;
            case 'post':
                $uri = $_POST;
                break;
            default:
                $uri = $_GET;
                break;
        }
        $queryFinal = "";
        foreach ($uri as $key=>$var){
            $queryFinal .= "{$key}={$var}&";
        }
        return $queryFinal;
    }
    
}